Serial attached storage protocols, such as serial ATA (SATA) and serial Small Computer System Interface (SCSI) (SAS) are becoming more prevalent for connecting storage devices to a computer system. In computer systems implementing such serial storage devices, one storage device in the system may communicate with others. For example, a device requesting data (referred to as the initiator device) may receive data from a target device.
Task scheduling is a critical factor for providing efficient input/output (I/O) performance in complex server storage systems. For instance, tasks may include new commands, XFER_RDY frames, data, data sequence, response frames, primitives, or anything that needs to be processed. Task scheduling includes searching a next remote node (from a remote node list) to service, and searching a next task (from task list) to schedule within a remote node. Traditional mechanisms for how to assign those tasks to different remote nodes has become very complex in large storage systems.